<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
          ① 如果try报错，自报错位置开始，try的后续代码停止执行，同是执行catch代码
          ② 如果是语法错误，无法通过 catch 捕捉

          throw
          ① 中断程序执行
          ② 手动抛出一个异常
          ③ throw 可以抛出任意值类型，约定抛出一个Error对象

          逻辑错误
          ① 定义错误对象
          ② 根据业务逻辑抛出错误对象
          ③ catch 捕捉错误（保证错误影响范围最小，不影响外部代码的执行）

          finally 作用
          如果代码执行过程中，没有问题要执行a代码，有问题也要执行a代码，那么a代码就应该放到 finally 中写

          window.onerror 全局错误捕捉
          ① 必须定义在所有代码的最前面
          ② 只要有错误被抛出，onerror方法就会自动执行
       */
      // 老版本浏览器中没有try catch 只能使用 onerror
      window.onerror = function (message, url, line, col, error) {
        console.log(message);
        console.log(url);
        console.log(line);
        console.log(col);
        console.log(error);
        console.log(error.name);
        console.log(error.message);
      };

      // throw new Error("hahaha");
      JSON.parse('{"a":1,}');
    </script>
  </body>```````
</html>
